//
// Created by QU on 2023/7/19.
//

#include <stdint.h>

#ifndef VHDLSENDER_HEADER_H
#define VHDLSENDER_HEADER_H

///**
// * @brief 单个普通数据块
// */
//typedef struct {
//    uint16_t MFI;
//    unsigned char * payload;
//} vcFrameBody_t;
//
///**
// * @brief 包含通道等信息的 (第一个数据块)
// */
//typedef struct {
//    uint16_t logicalChannelID;
//    uint16_t physicalChannelID;
//    uint16_t SQ;
//    uint16_t frameLen;
//    uint16_t frameNum;
//    int vcType;         // 1: VC-4          2: VC-12
//
//    // 注意这里包含单个frame.
//    vcFrameBody_t frameBody;
//} vcFrameHead_t;
// */

// TODO:
#define VC4_FRAME_HEADER_LENGTH 2349      // 单个VC-4帧结构,包含开销 261*9
#define VC4_FRAME_BODY_LENGTH 2316
#define VC4_FRAME_LOAD_LENGTH 2314      // 这里多留了一些冗余 259*9
//#define VC4_FRAMEBODY_LOAD_LENGTH  (VC4_FRAMEBODY_FULL_LENGTH - sizeof(vc4FrameHead_t))      // 单个VC-4帧结构的载荷部分,不包含开销

// TODO:
#define VC12_FRAME_HEADER_LENGTH 140      // 单个VC-12帧结构,包含开销 35*4
#define VC12_FRAME_BODY_LENGTH 116      // 单个VC-12帧结构,包含开销 35*4
#define VC12_FRAME_LOAD_LENGTH 114     // 单个VC-12帧结构,包含开销 33*4
//#define VC12_FRAMEBODY_LOAD_LENGTH  (VC12_FRAMEBODY_FULL_LENGTH - sizeof(vc12FrameHead_t))     // 单个VC-12..


enum VC_TYPE {
    VC_4,VC_12
};

// VC-4结构定义
typedef struct {
    uint16_t MFI;
    char load[VC4_FRAME_LOAD_LENGTH];
}vc4FrameBody_t;

typedef struct {
    uint16_t logicalChannelID;
    uint16_t physicalChannelID;
    uint16_t SQ;
    enum VC_TYPE vcType;
    uint16_t frameLength;
    uint16_t frameNum;
    vc4FrameBody_t frameBody;
}vc4FrameHead_t;

// VC-12结构定义
typedef struct {
    uint16_t MFI;
    char load[VC12_FRAME_LOAD_LENGTH];
}vc12FrameBody_t;

typedef struct {
    uint16_t logicalChannelID;
    uint16_t physicalChannelID;
    uint16_t SQ;
    enum VC_TYPE vcType;
    uint16_t frameLength;
    uint16_t frameNum;
    vc12FrameBody_t frameBody;
}vc12FrameHead_t;


enum GENERATE_DATA_TYPE {
    FIXED = 0,
};

#endif //VHDLSENDER_HEADER_H
